package ai.people.netmon.telegram.domain.request.channels;

import ai.people.netmon.framework.domain.telegram.entity.Channels;
import ai.people.netmon.framework.model.request.PageKeyWordsRequest;
import ai.people.netmon.utils.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.Objects;

/**
 * 隐匿网络信源探测群组查询条件
 *
 * @author yuanqinglong
 * @date 2022/1/7 15:38
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class ChannelsRequest extends PageKeyWordsRequest {


    /**
     * 搜索关键字
     */
    private String searchKeywords;

    /**
     * 语种
     */
    private String language;
    /**
     * 类型 0表示群 1表示频道 2表示机器人 3用户
     */
    private Integer type;
    /**
     * 群类型（0、公开 1、私有）
     */
    private Integer grouptype;

    // TODO: 2022/1/7 加群状态

    // TODO: 2022/1/7 操作状态

    /**
     * 推荐级别
     */
    private Integer recommendLevel;
    /**
     * 重要度(取值为0-5，-2：失效，0：不重要，1:一般，2：不活跃，3：一般重要，4：比较重要，5非常重要；)
     */
    private Integer importanceDeg;
    /**
     * 业务类型
     */
    private String businessType;
    /**
     * 有效性，0表示无效 1表示有效 2表示不活跃,3机器人占据
     */
    private Integer validity;
    /**
     * 国家代码
     */
    private String countryCode;


    /**
     * 创造查询条件
     */
    public LambdaQueryWrapper<Channels> createConditions() {
        LambdaQueryWrapper<Channels> lambdaQuery = Wrappers.lambdaQuery();
        if (StringUtils.isNotEmpty(language)) {
            lambdaQuery.eq(Channels::getLanguage, language);
        }
        if (Objects.nonNull(grouptype) && type != -1) {
            lambdaQuery.eq(Channels::getType, type);
        }
        if (Objects.nonNull(grouptype) && grouptype != -1) {
            lambdaQuery.eq(Channels::getGrouptype, grouptype);
        }
        if (Objects.nonNull(grouptype) && recommendLevel != -1) {
            lambdaQuery.eq(Channels::getRecommendLevel, recommendLevel);
        }
        if (Objects.nonNull(grouptype) && importanceDeg != -1) {
            lambdaQuery.eq(Channels::getImportanceDeg, importanceDeg);
        }
        if (StringUtils.isNotEmpty(businessType)) {
            lambdaQuery.eq(Channels::getBusinessType, businessType);
        }
        if (Objects.nonNull(grouptype) && validity != -1) {
            lambdaQuery.eq(Channels::getValidity, validity);
        }
        if (StringUtils.isNotEmpty(countryCode)) {
            lambdaQuery.eq(Channels::getCountryCode, countryCode);
        }
        return lambdaQuery;
    }

}
